﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Prisa.BussinesLogic;
using Prisa.Entities;
using Microsoft.Practices.Unity;

namespace Prisa.UI
{
    public partial class frmMttoVenta : Form
    {
        [Dependency]
        public IClienteBL clienteBL { get; set; }
        
        [Dependency]
        public  IProductoBL productoBL { get; set; }

        [Dependency]
        public IVentaBL ventaBL { get; set; }

        [Dependency]
        public IImpuestoBL impBL { get; set; }

        [Dependency]
        public IDetalleVentaBL detalleBL { get; set; }

        [Dependency]
        public IHistorialVentaBL historialBL{ get; set; }

        public frmMttoVenta()
        {
            InitializeComponent();
            this.BuildUp();
        }

        bool isNew=true;

        private void frmMttoVenta_Load(object sender, EventArgs e)
        {
            //iMPUESTOBindingSource.DataSource = impBL.GetAnImpuestoToVenta();
            
            CalcularTotal();
            lblAyuda.Visible = false;
            lblMensaje.Visible = false;
        }

        public void Nuevo()
        {
            vENTABindingSource.AddNew();
        }

        private void CargarCliente()
        {
            frmCliente frm = new frmCliente();
            frm.Clien = true;
            frm.ShowDialog();


            if (frm.CurrentCliente != null)
            {
                var venta = vENTABindingSource.Current as VENTA;
                venta.CLIENTE = frm.CurrentCliente;
                venta.ClienteId = frm.CurrentCliente.Id;
                vENTABindingSource.ResetBindings(true);
                BtnVerificar.Enabled = false;
            }
        }

        private void VerifiarCliente()
        {
            var DNI = clienteBL.GetFromOneClienteByDniRuc(dniRucTextBox.Text);
            if (DNI != null)
            {
                if (rbtnBoleta.Checked == true)
                {
                    if (dniRucTextBox.Text.Length == 8)
                    {
                        var venta = vENTABindingSource.Current as VENTA;
                        venta.CLIENTE = DNI;
                        venta.ClienteId = DNI.Id;
                        vENTABindingSource.ResetBindings(true);
                    }
                    else
                    {
                        MessageBox.Show(this, "Para emitir una BOLETA es necesario un número de DNI", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        nombreRazonSocialTextBox.Text = ""; direccionTextBox.Text = "";
                    }
                } 
                if (rbtnFactura.Checked == true)
                {
                    if (dniRucTextBox.Text.Length == 11)
                    {
                        var venta = vENTABindingSource.Current as VENTA;
                        venta.CLIENTE = DNI;
                        venta.ClienteId = DNI.Id;
                        vENTABindingSource.ResetBindings(true);
                    }
                    else
                    {
                        MessageBox.Show(this, "Para emitir una FACTURA es necesario un número de RUC", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        nombreRazonSocialTextBox.Text = ""; direccionTextBox.Text = "";
                    }
                }
            } 
            else
            {
                MessageBox.Show(this, "Cliente no existente", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
                nombreRazonSocialTextBox.Text = ""; direccionTextBox.Text = "";
            }
        }

        private void dniRucTextBox_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.F2 && isNew == true)
            {
                try
                {
                    var cliente = clienteBL.GetFromClienteById(1);

                    var venta = vENTABindingSource.Current as VENTA;
                    venta.CLIENTE = cliente;
                    venta.ClienteId = cliente.Id;
                    BtnVerificar.Enabled = false;
                }
                catch
                {
                    MessageBox.Show("Cliente VARIOS no existente", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
                vENTABindingSource.ResetBindings(true);
            }
            if (e.KeyCode == Keys.F1 && isNew == true)
            {
                CargarCliente();
            }
            if (e.KeyCode == Keys.Enter && isNew == true && dniRucTextBox.Text.Length > 0)
            {
                VerifiarCliente();
            } 
        }

        private void dniRucTextBox_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
        {
            if (e.KeyCode == Keys.Tab && isNew == true && dniRucTextBox.Text.Length > 0)
            {
                VerifiarCliente();
            }
        }

        private void BtnVerificar_Click(object sender, EventArgs e)
        {
            if(dniRucTextBox.Text.Length > 0)
            {
                VerifiarCliente();
            }
        } 

        private void BtnBuscarProducto_Click(object sender, EventArgs e)
        {
            BuscarProducto();
        }
        
        private void TxtDescripcion_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                BuscarProducto();
            }
        }

        private void BuscarProducto()
        {
            List<PRODUCTO> existenProductos;
            existenProductos = productoBL.GetFromProductoByDescripcion(TxtDescripcion.Text);

            if (existenProductos.Count <= 0)
            {
                lblMensaje.Visible = true;
            }
            else
            {
                lblMensaje.Visible = false;
                pRODUCTOBindingSource.DataSource = productoBL.GetFromProductoByDescripcion(TxtDescripcion.Text);
            }
        }
        
        private void pRODUCTODataGridView_DoubleClick(object sender, EventArgs e)
        {
            AgregarProducto();
        }

        private void AgregarProducto()
        {
            PRODUCTO producto = pRODUCTOBindingSource.Current as PRODUCTO;
            VENTA currentVenta = vENTABindingSource.Current as VENTA;
              
            if (producto != null && producto.Stock > 0)
            {
                var detalle = new DETALLEVENTA
                {
                    VentaId = currentVenta.Id,
                    ProductoId = producto.Id,
                    PRODUCTO = producto,
                    Cantidad = 1,
                    Precio = producto.Precio,
                    Descuento = 0,
                };

                var existe = currentVenta.DETALLEVENTAs.Where(dv => dv.PRODUCTO.Id.Equals(producto.Id)).SingleOrDefault();
                if (existe == null)
                {
                    currentVenta.DETALLEVENTAs.Add(detalle);
                    CalcularTotal();
                }
                else
                {
                    var rpt = MessageBox.Show(this, string.Format("El producto: {0}," + "ya se encuentra en le pedido, desea agregra otro?", producto.Descripcion),
                    "Mensaje", MessageBoxButtons.YesNo, MessageBoxIcon.Question);

                    if (rpt == DialogResult.Yes)
                    {
                        existe.Cantidad++;

                        CalcularTotal();
                    }
                }
                vENTABindingSource.ResetBindings(true);
                dETALLEVENTAsBindingSource.ResetBindings(true);
                LoadImpuesto();

            }
            else MessageBox.Show("La cantidad supera el stock disponible.", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);

        }
        
        public void CalcularTotal()
        {
            var currentVenta = vENTABindingSource.Current as VENTA;

            if (currentVenta != null)
            {
                if (rbtnBoleta.Checked == true)
                {
                    LoadImpuesto();
                    var Total = currentVenta.DETALLEVENTAs.Sum(dv => dv.Monto);
                    var Descuento = currentVenta.DETALLEVENTAs.Sum(dv => dv.Descuento);
                    
                    //currentVenta.Total = Total - Descuento;
                    currentVenta.Total = Math.Round(Total - Descuento, 2);

                    var SubTotalRound = Math.Round(Total, 2);
                    var IgvRound = Math.Round((Convert.ToDecimal("0")), 2);

                    txtSubTotal.Text = SubTotalRound.ToString();
                    txtIGV.Text = IgvRound.ToString();

                }
                if (rbtnFactura.Checked == true)
                {
                    var impuesto = new IMPUESTO();

                    try
                    {
                        //impuesto = impBL.GetAnImpuestoToVenta();
                        impuesto = impBL.GetFromImpuestoById(2);

                        if (impuesto != null)
                        {
                            var Total = currentVenta.DETALLEVENTAs.Sum(dv => dv.Monto);
                            var Descuento = currentVenta.DETALLEVENTAs.Sum(dv => dv.Descuento);
                            currentVenta.Total = Total - Descuento;
                            //currentVenta.Total = Total;

                            var porcentaje = (impuesto.Porcentaje) + 1;

                            var SubTot = Total / porcentaje;

                            var SubTotalRound = Math.Round(SubTot, 2);
                            var IgvRound = Math.Round((currentVenta.Total - SubTot), 2);

                            txtSubTotal.Text = SubTotalRound.ToString();
                            txtIGV.Text = IgvRound.ToString();
                        }
                        else MessageBox.Show("Verifique las reglas de negocio", "Mensaje", 
                            MessageBoxButtons.OK, MessageBoxIcon.Information);

                    }
                    catch
                    {
                        MessageBox.Show("Verifique las reglas de negocio", "Mensaje", 
                            MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                }
                vENTABindingSource.ResetBindings(true);
            }
        }

        private void rbtnFactura_Click(object sender, EventArgs e)
        {
            CalcularTotal();
            LoadImpuesto();
        }

        private void LoadImpuesto()
        {
            if (rbtnFactura.Checked == true)
            {
                //var imp = impBL.GetAnImpuestoToVenta();
                var imp = impBL.GetFromImpuestoById(2);

                if (imp != null)
                {
                    lblImp.Visible = true;
                    lblImp.Text = imp.Porcentaje.ToString();
                }
                else
                {
                    lblImp.Text = "0.00";
                    txtIGV.Text = "0.00";
                    txtSubTotal.Text = "0.00";
                }
            }
            
        }

        private void dETALLEVENTAsDataGridView_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Delete)
            {
                QuitarProducto();
            }
        }
        
        private void QuitarProducto()
        {
            var  currentVenta = vENTABindingSource.Current as VENTA; 
            var detalle = dETALLEVENTAsBindingSource.Current as DETALLEVENTA;

            var rpt = MessageBox.Show(this,string.Format("¿Desea quitar el producto: {0}, del Pedido?",
                      detalle.PRODUCTO.Descripcion),"Mensaje", MessageBoxButtons.YesNo, MessageBoxIcon.Question);

            if (rpt == DialogResult.Yes)
            {
                if (detalle.Id > 0)
                {
                    detalleBL.RemoveDetalleVentaByProductoIdAndVentaId(currentVenta.Id, detalle.PRODUCTO.Id);
                }
                dETALLEVENTAsBindingSource.RemoveCurrent();
                CalcularTotal();
            }
        }
        
        private void dETALLEVENTAsDataGridView_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            if (this.dETALLEVENTAsDataGridView.Columns[e.ColumnIndex].Name.Equals("quitar"))
            {
                QuitarProducto();
            }
            
            LoadImpuesto();
        }

        private void pRODUCTODataGridView_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            if (this.pRODUCTODataGridView.Columns[e.ColumnIndex].Name.Equals("Agregar"))
            {
                AgregarProducto();
            }

        }

        private void BtnGuardar_Click(object sender, EventArgs e)
        {
            var currentVenta = vENTABindingSource.Current as VENTA;
            if (currentVenta!= null)
            {
                if (rbtnBoleta.Checked)
                {
                    var minBoleta = Convert.ToDecimal(impBL.GetFromImpuestoById(3).Porcentaje);

                    if (currentVenta.Total > minBoleta) // monto minimo para boleta
                    {
                        var longitud = dniRucTextBox.Text.Length;
                        if (longitud >= 8)
                        {
                            GuardarVentaBtn();
                        }
                        else
                        {
                            MessageBox.Show("Debe elegir un cliente \nHaga clic en Ruc Dni y presione F2 para elegirlo", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
                            dniRucTextBox.Focus();
                        }
                    }

                    if (currentVenta.Total <= minBoleta) // monto minimo para boleta
                    {
                        if (currentVenta.Total > 0)
                        {
                            var count = 0;
                            foreach (var item in currentVenta.DETALLEVENTAs)
                            {
                                var prod = productoBL.GetFromProductoById(item.PRODUCTO.Id);

                                if (item.Cantidad > 0 && item.Cantidad <= prod.Stock)
                                {
                                    var historial = new HISTORIAL_VENTAS
                                    {
                                        ProductoId = item.ProductoId,
                                        Fecha = DateTime.Now.Date,
                                        //Precio = item.Precio - item.Descuento,
                                        Precio = item.Precio - item.Descuento, 
                                        Cantidad = Convert.ToInt32(item.Cantidad),
                                        Total = item.Cantidad * (item.Precio - item.Descuento),
                                        Contado = false,
                                        Credito = false,
                                        Menudeo = true,
                                        Cancelada = false,
                                        Observacion = " ",
                                    };
                                    count++;
                                    historialBL.AddHistorialVentas(historial);
                                }
                                else
                                {
                                    MessageBox.Show("La cantidad supera el stock disponible.", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                }
                            }
                            if (count == currentVenta.DETALLEVENTAs.Count())
                            {
                                MessageBox.Show("Menudeo Registrado Correctamente.", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                Close();

                                /////////////////////77
                                //frmMttoVenta frm = new frmMttoVenta();
                                //frm.Nuevo();
                                //frm.ShowDialog();
                                /////////////////////////////////
                            }
                        }
                        else MessageBox.Show("Venta no válida.", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                }
                if (rbtnFactura.Checked)
                {
                    var minFact = Convert.ToDecimal(impBL.GetFromImpuestoById(4).Porcentaje);

                    if (currentVenta.Total >= minFact) // monto minimo para factura
                    {
                        var longitud = dniRucTextBox.Text.Length;
                        if (longitud >= 8)
                        {
                            GuardarVentaBtn();
                        }
                        else
                        {
                            MessageBox.Show("Debe elegir un cliente \nHaga clic en Ruc Dni y presione F2 para elegirlo", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
                            dniRucTextBox.Focus();
                        }
                    }

                    if (currentVenta.Total < minFact) // monto minimo para factura
                    {
                        if (currentVenta.Total > 0)
                        {
                            var count = 0;
                            foreach (var item in currentVenta.DETALLEVENTAs)
                            {
                                var prod = productoBL.GetFromProductoById(item.PRODUCTO.Id);

                                if (item.Cantidad > 0 && item.Cantidad <= prod.Stock)
                                {
                                    var historial = new HISTORIAL_VENTAS
                                    {
                                        ProductoId = item.ProductoId,
                                        Fecha = DateTime.Now.Date,
                                        Precio = item.Precio - item.Descuento,
                                        Cantidad = Convert.ToInt32(item.Cantidad),
                                        Total = item.Cantidad * (item.Precio - item.Descuento),
                                        Contado = false,Credito = false,Menudeo = true,Cancelada = false,
                                        Observacion = " ",
                                    };
                                    count++;
                                    historialBL.AddHistorialVentas(historial);
                                }
                                else
                                {
                                    MessageBox.Show("La cantidad supera el stock disponible.", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                }
                            }
                            if (count == currentVenta.DETALLEVENTAs.Count())
                            {
                                MessageBox.Show("Menudeo Registrado Correctamente.", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                Close();
                            }
                        }
                        else MessageBox.Show("Venta no válida.", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
 
                }
            }
        }

        private void GuardarVentaBtn()
        {
            var currentVenta = vENTABindingSource.Current as VENTA;
            var msg = "ERROR";

            if (currentVenta != null && isNew == true)
            {
                var longitud = dniRucTextBox.Text.Length;
                if ((rbtnBoleta.Checked == true && longitud == 8) || (rbtnFactura.Checked == true && longitud == 11))
                {
                    try
                    {
                        if (rbtnBoleta.Checked == true)
                        {
                            currentVenta.ImpuestoId = impBL.GetFromImpuestoById(1).Id;
                            currentVenta.IGV = impBL.GetFromImpuestoById(1).Porcentaje.ToString();
                            currentVenta.Factura = false;
                        }

                        if (rbtnFactura.Checked == true)
                        {
                            currentVenta.ImpuestoId = impBL.GetFromImpuestoById(2).Id;
                            currentVenta.IGV = impBL.GetFromImpuestoById(2).Porcentaje.ToString();
                            currentVenta.Factura = true;
                        }
                        
                        currentVenta.Fecha = DateTime.Today.Date;
                        ventaBL.AddVenta(currentVenta);
                        MessageBox.Show("Venta Registrada Correctamente", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        Close();
                    }
                    catch (Exception ex)
                    {
                        msg = ex.Message;
                        MessageBox.Show(msg, "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                }
                else
                    MessageBox.Show("El tipo de cliente debe coincidir con el tipo de comprobante", "Mensaje",
                        MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            
        }

        private void dETALLEVENTAsDataGridView_CellValueChanged(object sender, DataGridViewCellEventArgs e)
        {
            if (e.ColumnIndex == 0 || e.ColumnIndex == 2 || e.ColumnIndex == 4)
            {
                var producto = new PRODUCTO();
                var detalle = dETALLEVENTAsBindingSource.Current as DETALLEVENTA;

                if (detalle != null)
                { 
                    producto = productoBL.GetFromProductoById(detalle.PRODUCTO.Id);
                    if (detalle.Cantidad <= 0)
                    {
                        MessageBox.Show("La cantidad debe ser mayor a 0", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        detalle.Cantidad = 1;
                    }
                    else 
                    {
                        if (detalle.Cantidad > producto.Stock)
                        {
                            MessageBox.Show("La cantidad supera el stock disponible", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
                            detalle.Cantidad = producto.Stock;
                        }
                    }
                    dETALLEVENTAsBindingSource.ResetBindings(true);
                    CalcularTotal();
                }
            }
            LoadImpuesto();
        }

        private void txtPagado_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                CalcularVuelto();
            }
        }

        private void txtPagado_Leave(object sender, EventArgs e)
        {
            CalcularVuelto();
        }

        private void CalcularVuelto()
        {
            try
            {
                var venta = vENTABindingSource.Current as VENTA;

                if (Convert.ToDecimal(txtPagado.Text) > 0)
                {
                    var pagado = Convert.ToDecimal(txtPagado.Text);
                    var vuelto = pagado - venta.Total;
                    if (pagado > 0 && pagado >= venta.Total)
                    {
                        txtVuelto.Text = vuelto.ToString();
                    }
                    else MessageBox.Show(this, "El importe pagado debe ser mayor al monto total", "Mensaje",
                        MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }
            catch (Exception)
            {
                MessageBox.Show("Importe pagado incorrecto", "Mensaje",
                    MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }

        private void btnBuscarDetalle_Click(object sender, EventArgs e)
        {
            BuscarProductoEnDetalle();            
        }
        
        private void txtProdDesc_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                BuscarProductoEnDetalle();
            }
        }

        private void BuscarProductoEnDetalle()
        {

            List<DETALLEVENTA> listatemp = new List<DETALLEVENTA>();
            var producto = pRODUCTOBindingSource.Current as PRODUCTO;
            var _venta = vENTABindingSource.Current as VENTA;
            
            if (_venta != null)
            {
                if (txtProductoDes.Text != null && txtProductoDes.Text != "" && txtProductoDes.Text != string.Empty)
                {
                    foreach (var item in _venta.DETALLEVENTAs)
                    {
                        var descMayus = (txtProductoDes.Text).ToUpper();
                        var itemPRO = (item.PRODUCTO.Descripcion).ToUpper();
                        var a = itemPRO.Contains(descMayus);
                        if (a == true)
                        {
                            listatemp.Add(item); 
                        }
                    }
                    dETALLEVENTAsBindingSource.DataSource = listatemp;
                    dETALLEVENTAsBindingSource.ResetBindings(true);
                }
                else
                {
                    dETALLEVENTAsBindingSource.DataSource = _venta.DETALLEVENTAs;
                    dETALLEVENTAsBindingSource.ResetBindings(true);
                }
            }
            else
                MessageBox.Show("No existen productos en la venta", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }

        private void pRODUCTODataGridView_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                AgregarProducto();
            }
        }
       
        private void dniRucTextBox_TextChanged(object sender, EventArgs e)
        {
            lblAyuda.Visible = true;
        }

        private void dniRucTextBox_Leave(object sender, EventArgs e)
        {
            lblAyuda.Visible = false;
        }

        private void dniRucTextBox_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!(char.IsNumber(e.KeyChar)) && (e.KeyChar != (char)Keys.Back)
                && (e.KeyChar != (char)Keys.Enter) && (e.KeyChar != (char)Keys.Clear))
            {
                e.Handled = true;
                return;
            }
        }

        private void dniRucTextBox_Click(object sender, EventArgs e)
        {
            lblAyuda.Visible = true;
        }

        private void txtPagado_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (
                !char.IsNumber(e.KeyChar) &&
                !char.IsDigit(e.KeyChar) &&
                e.KeyChar != (char)Keys.Back &&
                e.KeyChar != (char)Keys.Enter
                )
            {
                e.Handled = true;
            }

            if (e.KeyChar == '.' || e.KeyChar == '\b')
            {
                e.Handled = false;
            }
        }

        private void btnCalcVuelto_Click(object sender, EventArgs e)
        {
            CalcularVuelto();
        }

        private void rbtnBoleta_Click(object sender, EventArgs e)
        {
            CalcularTotal();
            lblImp.Visible = false;
        }

       private void BtnNewProducto_Click(object sender, EventArgs e)
        {
            var frm = new frmMttoProducto();
            frm.Nuevo();
            frm.ShowDialog();
            pRODUCTOBindingSource.DataSource = productoBL.GetFromProductoByDescripcion(TxtDescripcion.Text);
            lblMensaje.Visible = false;
        }
        
        private void dETALLEVENTAsDataGridView_DataError(object sender, DataGridViewDataErrorEventArgs e)
        {
            MessageBox.Show("Asegurese de ingresar un número correcto", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
            //var detalle = dETALLEVENTAsBindingSource.Current as DETALLEVENTA;
            //detalle.Cantidad = 1;
        }

        private void TxtDescripcion_KeyPress(object sender, KeyPressEventArgs e)
        {
            var guion = Convert.ToString("-");
            var coma = Convert.ToString(",");
            var punto = Convert.ToString(".");
            var slash = Convert.ToString("/");
            var amber = Convert.ToString("&");

            string cadena = guion + coma + punto + slash + amber + (char)8;
            if (!cadena.Contains(e.KeyChar) && !(char.IsLetter(e.KeyChar)) && !(char.IsNumber(e.KeyChar))
                && (e.KeyChar != (char)Keys.Back) && (e.KeyChar != (char)Keys.Enter) && (e.KeyChar != (char)Keys.Clear)
                && !(char.IsSeparator(e.KeyChar)))
            {
                e.Handled = true;
                return;
            }
        }

        private void txtProductoDes_KeyPress(object sender, KeyPressEventArgs e)
        {
            var guion = Convert.ToString("-");
            var coma = Convert.ToString(",");
            var punto = Convert.ToString(".");
            var slash = Convert.ToString("/");
            var amber = Convert.ToString("&");

            string cadena = guion + coma + punto + slash + amber + (char)8;
            if (!cadena.Contains(e.KeyChar) && !(char.IsLetter(e.KeyChar)) && !(char.IsNumber(e.KeyChar))
                && (e.KeyChar != (char)Keys.Back) && (e.KeyChar != (char)Keys.Enter) && (e.KeyChar != (char)Keys.Clear)
                && !(char.IsSeparator(e.KeyChar)))
            {
                e.Handled = true;
                return;
            }
        }


       


    }
}
